* @since 1.19
*/
class LogFormatter {
+ // Audience options for viewing usernames, comments, and actions
+ const FOR_PUBLIC = 1;
+ const FOR_THIS_USER = 2;
// Static->
/// @var LogEntry
protected $entry;
+ /// Integer constant for handling log_deleted
+ protected $audience = self::FOR_PUBLIC;
+
/// Whether to output user tool links
protected $linkFlood = false;
$this->context = $context;
}
+ /**
+ * Set the visibility restrictions for displaying content.
+ * If set to public, and an item is deleted, then it will be replaced
+ * with a placeholder even if the context user is allowed to view it.
+ * @param $audience integer self::FOR_THIS_USER or self::FOR_PUBLIC
+ */
+ public function setAudience( $audience ) {
+ $this->audience = ( $audience == self::FOR_THIS_USER )
+ ? self::FOR_THIS_USER
+ : self::FOR_PUBLIC;
+ }
+
+ /**
+ * Check if a log item can be displayed
+ * @param $field integer LogPage::DELETED_* constant
+ * @return bool
+ */
+ protected function canView( $field ) {
+ if ( $this->audience == self::FOR_THIS_USER ) {
+ return LogEventsList::userCanBitfield(
+ $this->entry->getDeleted(), $field, $this->context->getUser() );
+ } else {
+ return !$this->entry->isDeleted( $field );
+ }
+ }
+
/**
* If set to true, will produce user tool links after
* the user name. This should be replaced with generic
* @return string HTML
*/
public function getActionText() {
- $element = $this->getActionMessage();
- if ( $element instanceof Message ) {
- $element = $this->plaintext ? $element->text() : $element->escaped();
- }
-
- if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
+ if ( $this->canView( LogPage::DELETED_ACTION ) ) {
+ $element = $this->getActionMessage();
+ if ( $element instanceof Message ) {
+ $element = $this->plaintext ? $element->text() : $element->escaped();
+ }
+ if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
+ $element = $this->styleRestricedElement( $element );
+ }
+ } else {
$performer = $this->getPerformerElement() . $this->msg( 'word-separator' )->text();
- $element = $performer . self::getRestrictedElement( 'rev-deleted-event' );
+ $element = $performer . $this->getRestrictedElement( 'rev-deleted-event' );
}
return $element;
* which parts of the log entry has been hidden.
*/
public function getPerformerElement() {
- $performer = $this->entry->getPerformer();
- $element = $this->makeUserLink( $performer );
-
- if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) {
- $element = self::getRestrictedElement( 'rev-deleted-user' );
+ if ( $this->canView( LogPage::DELETED_USER ) ) {
+ $performer = $this->entry->getPerformer();
+ $element = $this->makeUserLink( $performer );
+ if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) {
+ $element = $this->styleRestricedElement( $element );
+ }
+ } else {
+ $element = $this->getRestrictedElement( 'rev-deleted-user' );
}
return $element;
* @return string HTML
*/
public function getComment() {
- $comment = Linker::commentBlock( $this->entry->getComment() );
- // No hard coded spaces thanx
- $element = ltrim( $comment );
-
- if ( $this->entry->isDeleted( LogPage::DELETED_COMMENT ) ) {
- $element = self::getRestrictedElement( 'rev-deleted-comment' );
+ if ( $this->canView( LogPage::DELETED_COMMENT ) ) {
+ $comment = Linker::commentBlock( $this->entry->getComment() );
+ // No hard coded spaces thanx
+ $element = ltrim( $comment );
+ if ( $this->entry->isDeleted( LogPage::DELETED_COMMENT ) ) {
+ $element = $this->styleRestricedElement( $element );
+ }
+ } else {
+ $element = $this->getRestrictedElement( 'rev-deleted-comment' );
}
return $element;
/**
* Helper method for displaying restricted element.
* @param $message string
- * @return string HTML
+ * @return string HTML or wikitext
*/
protected function getRestrictedElement( $message ) {
if ( $this->plaintext ) {
return Html::rawElement( 'span', $attribs, $content );
}
+ /**
+ * Helper method for styling restricted element.
+ * @param $content string
+ * @return string HTML or wikitext
+ */
+ protected function styleRestricedElement( $content ) {
+ if ( $this->plaintext ) {
+ return $content;
+ }
+ $attribs = array( 'class' => 'history-deleted' );
+ return Html::rawElement( 'span', $attribs, $content );
+ }
+
/**
* Shortcut for wfMessage which honors local context.
* @todo Would it be better to require replacing the global context instead?
public function getHTML() {
$date = htmlspecialchars( $this->list->getLanguage()->timeanddate( $this->row->log_timestamp ) );
- $paramArray = LogPage::extractParams( $this->row->log_params );
$title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
+ $formatter = LogFormatter::newFromRow( $this->row );
+ $formatter->setAudience( LogFormatter::FOR_THIS_USER );
// Log link for this page
$loglink = Linker::link(
array(),
array( 'page' => $title->getPrefixedText() )
);
- // Action text
- if( !$this->canView() ) {
- $action = '<span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';
- } else {
- $skin = $this->list->getSkin();
- $action = LogPage::actionText( $this->row->log_type, $this->row->log_action,
- $title, $skin, $paramArray, true, true );
- if( $this->row->log_deleted & LogPage::DELETED_ACTION )
- $action = '<span class="history-deleted">' . $action . '</span>';
- }
- // User links
- $userLink = Linker::userLink( $this->row->log_user,
- User::WhoIs( $this->row->log_user ) );
- if( LogEventsList::isDeleted($this->row,LogPage::DELETED_USER) ) {
- $userLink = '<span class="history-deleted">' . $userLink . '</span>';
- }
+ // User links and action text
+ $action = $formatter->getActionText();
// Comment
$comment = $this->list->getLanguage()->getDirMark() . Linker::commentBlock( $this->row->log_comment );
if( LogEventsList::isDeleted($this->row,LogPage::DELETED_COMMENT) ) {
$comment = '<span class="history-deleted">' . $comment . '</span>';
}
- return "<li>($loglink) $date $userLink $action $comment</li>";
+
+ return "<li>($loglink) $date $action $comment</li>";
}
}